<%@ page import="entity.User" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %><%--
  Created by IntelliJ IDEA.
  User: teacher
  Date: 2023/7/5
  Time: 10:16
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>EL表达式</title>
</head>
<body>
<%
    // 模拟数据
    pageContext.setAttribute("msg", "Hello pageContext");
    request.setAttribute("msg", "Hello request");
    session.setAttribute("msg", "Hello session");
    application.setAttribute("msg", "Hello application");

    User user = new User(1, "admin", "123456", "13812345678", "江苏-南京");
    User user2 = new User(2, "alice", "111111", "13812345678", "江苏-南京");
    User user3 = new User(3, "jack", "222222", "13812345678", "江苏-南京");
    request.setAttribute("user", user);

    List<User> users = new ArrayList<User>();
    users.add(user);
    users.add(user2);
    users.add(user3);
    request.setAttribute("users", users);

    Map<String, User> map = new HashMap<String, User>();
    map.put("u1", user);
    map.put("u2", user2);
    map.put("3", user3);
    request.setAttribute("map", map);
%>
<h2>访问作用域</h2>
<!--
    使用EL表达式隐式对象中的作用域对象,可以操作对应作用域的数据
    表达式内容:对象.key
    key表示的是作用域中存储的数据的key
    表达式内容也可以直接使用key,不去指定作用域对象
    此时会在四大作用域中进行搜索
    根据作用域大小从小到大进行查找
    只要在某一个作用域中找到数据就直接返回
    首先在pageContext查找指定key的数据,如果找到了直接返回不再查找
    如果没有找到,则到request进行查找,以此类推
    如果四大作用域中均没有对应key的数据,则页面什么都不显示,相当于空字符串
    如果对应的数据是一个对象,获取属性可以直接使用对象名.属性名即可
-->
pageContext:${pageScope.msg}<br>
request:${requestScope.msg}<br>
session:${sessionScope.msg}<br>
application:${applicationScope.msg}<br>
msg:${msg}<br>
aaa:${aaa}<br>

<h2>获取对象</h2>
<!--
    在EL表达式中会遇到类似于java中的get/set方法,此时可以直接省略get关键字,方法其他名字首字母小写
-->
user:${user.id}--${user.username}--${user.password}--${user.phone}--${user.address}<br>

<h2>获取应用名</h2>
应用名:<%
    HttpServletRequest req = (HttpServletRequest) pageContext.getRequest();
    String path = req.getContextPath();
    out.print(path);
%><br>
EL表达式版应用名:${pageContext.request.contextPath}<br>

<h2>获取请求参数</h2>
<%
    String id = request.getParameter("id");
    out.print(id);
    String username = request.getParameter("username");
    out.print(username);
%><br>
${param.id}--${param.username}

<h2>获取List集合数据</h2>
<!--
    获取List集合的数据本质上就是get方法
    list.get(index)---list[index]
-->
${users[0].id}-${users[1].username}--${users[2].password}
<h2>获取Map集合</h2>
<!--
    两种语法:
        map[key]
        map.key:该方式的key不能以数字开头,即必须符合编码规范
-->
${map['u1'].id}--${map["u1"].username}--${map["u1"].password}<br>
${map.u2.id}--${map.u2.username}--${map.u2.password}<br>
${map["3"].id}
<h2>运算</h2>
<!--
    EL表达式的运算类似于js
-->
3+2=${3+2}<br>
3-2=${3-2}<br>
3*2=${3*2}<br>
3/2=${3/2}<br>
3%2=${3%2}<br>
${1 == "1"}<br>
${"2" eq "1"}<br>
user是否为空:${empty user}<br>
emp是否为空:${empty emp}<br>
三目:${2 == 1 ? "checked" : "no-checked"}<br>
三目:${2 == 2 ? "checked" : "no-checked"}<br>
且:${true and false}<br>
或:${true or false}<br>


<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
</body>
</html>
